package pe.com.csi.pm.regexiv.dao;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import pe.com.csi.pm.regexiv.bean.Alcantarilla;
import pe.com.csi.pm.regexiv.db.DaoManager;
import pe.com.csi.pm.regexiv.interfaces.AlcantarillaDAO;

public class AlcantarillaDAOImpl implements AlcantarillaDAO {

	private Context context;

	private String sql = "SELECT  ID_ALCA, PROYECTO, TRAMO, UBICACION, ESVIAJE, RECOMENDACION, TIPO, SENTIDO, CALIFICACION, LONGITUD, ANGULO, "
			+ " LUZ_E, LUZ_S, ALTURA_E, ALTURA_S, ALTURA_RELLENO_E, ALTURA_RELLENO_S, TIPO_ESTR_APROX_E, MATERIAL_APROX_E, TIPO_ESTR_E, MATERIAL_E, "
			+ " COND_ESTR_E, TIPO_ESTR_S, MATERIAL_S, COND_ESTR_S, TIPO_ESTR_APROX_S, MATERIAL_APROX_S, COND_HIDRA, FUNCION, REVISADO_POR, LATITUD_GPS, LONGITUD_GPS, FECHA, IMEI "
			+ " FROM ALCANTARILLA ";

	public AlcantarillaDAOImpl(Context context) {
		this.context = context;
	}

	@Override
	public int registrar(Alcantarilla alca) {
		int rows = 0;
		try {
			DaoManager usdbh = new DaoManager(context);
			SQLiteDatabase db = usdbh.getWritableDatabase();

			ContentValues valores = new ContentValues();
			valores.put("PROYECTO", alca.getProyecto());
			valores.put("TRAMO", alca.getTramo());
			valores.put("UBICACION", alca.getUbicacion());
			valores.put("TIPO", alca.getTipo());
			valores.put("ESVIAJE", alca.getEsviaje());
			valores.put("RECOMENDACION", alca.getRecomendacion());
			valores.put("SENTIDO", alca.getSentido());
			valores.put("CALIFICACION", alca.getCalificacion());
			valores.put("LONGITUD", alca.getLongitud());
			valores.put("ANGULO", alca.getAngulo());
			valores.put("LUZ_E", alca.getLuzE());
			valores.put("LUZ_S", alca.getLuzS());
			valores.put("ALTURA_E", alca.getAlturaE());
			valores.put("ALTURA_S", alca.getAlturaS());
			valores.put("ALTURA_RELLENO_E", alca.getAlturaRellenoE());
			valores.put("ALTURA_RELLENO_S", alca.getAlturaRellenoS());
			valores.put("TIPO_ESTR_APROX_E", alca.getTipoEstrAproxE());
			valores.put("MATERIAL_APROX_E", alca.getMaterialAproxE());
			valores.put("TIPO_ESTR_E", alca.getTipoEstrE());
			valores.put("MATERIAL_E", alca.getMaterialE());
			valores.put("COND_ESTR_E", alca.getCondEstrE());
			valores.put("TIPO_ESTR_S", alca.getTipoEstrS());
			valores.put("MATERIAL_S", alca.getMaterialS());
			valores.put("COND_ESTR_S", alca.getCondEstrS());
			valores.put("TIPO_ESTR_APROX_S", alca.getTipoEstrAproxS());
			valores.put("MATERIAL_APROX_S", alca.getMaterialAproxS());
			valores.put("COND_HIDRA", alca.getCondHidra());
			valores.put("FUNCION", alca.getFuncion());
			valores.put("REVISADO_POR", alca.getRevisadoPor());
			valores.put("LATITUD_GPS", alca.getLatitudGPS());
			valores.put("LONGITUD_GPS", alca.getLongitudGPS());
			valores.put("FECHA", alca.getFecha());
			valores.put("IMEI", alca.getImei());

			long pos = db.insert(DaoManager.TABLE_ALCANTARILLA, null, valores);
			System.out.println("REGISTRADO " + DaoManager.TABLE_ALCANTARILLA + "  " + pos);
			if (pos == -1)
				rows = 0;
			else
				rows = (int) pos;
			db.close();
		} catch (Exception e) {
			rows = 0;
			e.printStackTrace();
		}
		return rows;
	}

	@Override
	public int actualizar(Alcantarilla alca) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int eliminar(Alcantarilla alca) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int eliminarAll() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public List<Alcantarilla> obtenerAll() {
		List<Alcantarilla> lista = new ArrayList<Alcantarilla>();
		try {
			String sql = this.sql;
			lista = iterar(sql, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return lista;
	}

	@Override
	public List<Alcantarilla> obtenerAll(Alcantarilla alca) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Alcantarilla obtener(Alcantarilla alca) {
		// TODO Auto-generated method stub
		return null;
	}

	private List<Alcantarilla> iterar(String sql, String[] values) {
		System.out.println("sql " + sql);
		List<Alcantarilla> lista = new ArrayList<Alcantarilla>();
		SQLiteDatabase db = null;
		Cursor c = null;
		try {
			DaoManager usdbh = new DaoManager(context);
			db = usdbh.getReadableDatabase();
			c = db.rawQuery(sql, values);
			Alcantarilla alca;
			int position = 0;
			if (c.moveToFirst()) {
				do {
					long idAlca = !c.isNull(0) ? c.getLong(0) : 0;
					String proyecto = !c.isNull(1) ? c.getString(1) : "";
					String tramo = !c.isNull(2) ? c.getString(2) : "";
					double ubicacion = !c.isNull(3) ? c.getDouble(3) : 0;
					double esviaje = !c.isNull(4) ? c.getDouble(4) : 0;
					String recomendacion = !c.isNull(5) ? c.getString(5) : "";
					String tipo = !c.isNull(6) ? c.getString(6) : "";
					String sentido = !c.isNull(7) ? c.getString(7) : "";
					String calificacion = !c.isNull(8) ? c.getString(8) : "";
					double longitud = !c.isNull(9) ? c.getDouble(9) : 0;
					double angulo = !c.isNull(10) ? c.getDouble(10) : 0;
					double luzE = !c.isNull(11) ? c.getDouble(11) : 0;
					double luzS = !c.isNull(12) ? c.getDouble(12) : 0;
					double alturaE = !c.isNull(13) ? c.getDouble(13) : 0;
					double alturaS = !c.isNull(14) ? c.getDouble(14) : 0;
					double alturaRellenoE = !c.isNull(15) ? c.getDouble(15) : 0;
					double alturaRellenoS = !c.isNull(16) ? c.getDouble(16) : 0;
					String tipoEstrAproxE = !c.isNull(17) ? c.getString(17) : "";
					String materialAproxE = !c.isNull(18) ? c.getString(18) : "";
					String tipoEstrE = !c.isNull(19) ? c.getString(19) : "";
					String materialE = !c.isNull(20) ? c.getString(20) : "";
					String condEstrE = !c.isNull(21) ? c.getString(21) : "";
					String tipoEstrS = !c.isNull(22) ? c.getString(22) : "";
					String materialS = !c.isNull(23) ? c.getString(23) : "";
					String condEstrS = !c.isNull(24) ? c.getString(24) : "";
					String tipoEstrAproxS = !c.isNull(25) ? c.getString(25) : "";
					String materialAproxS = !c.isNull(26) ? c.getString(26) : "";
					String condHidra = !c.isNull(27) ? c.getString(27) : "";
					String funcion = !c.isNull(28) ? c.getString(28) : "";
					String revisadoPor = !c.isNull(29) ? c.getString(29) : "";
					String latitudGPS = !c.isNull(30) ? c.getString(30) : "";
					String longitudGPS = !c.isNull(31) ? c.getString(31) : "";
					String fecha = !c.isNull(32) ? c.getString(32) : "";
					String imei = !c.isNull(33) ? c.getString(33) : "";

					alca = new Alcantarilla();
					alca.setPosition(++position);
					alca.setIdAlca(idAlca);
					alca.setProyecto(proyecto);
					alca.setTramo(tramo);
					alca.setUbicacion(ubicacion);
					alca.setEsviaje(esviaje);
					alca.setRecomendacion(recomendacion);
					alca.setTipo(tipo);
					alca.setSentido(sentido);
					alca.setCalificacion(calificacion);
					alca.setLongitud(longitud);
					alca.setAngulo(angulo);
					alca.setLuzE(luzE);
					alca.setLuzS(luzS);
					alca.setAlturaE(alturaE);
					alca.setAlturaS(alturaS);
					alca.setAlturaRellenoE(alturaRellenoE);
					alca.setAlturaRellenoS(alturaRellenoS);
					alca.setTipoEstrAproxE(tipoEstrAproxE);
					alca.setMaterialAproxE(materialAproxE);
					alca.setTipoEstrE(tipoEstrE);
					alca.setMaterialE(materialE);
					alca.setCondEstrE(condEstrE);
					alca.setTipoEstrS(tipoEstrS);
					alca.setMaterialS(materialS);
					alca.setCondEstrS(condEstrS);
					alca.setTipoEstrAproxS(tipoEstrAproxS);
					alca.setMaterialAproxS(materialAproxS);
					alca.setCondHidra(condHidra);
					alca.setFuncion(funcion);
					alca.setRevisadoPor(revisadoPor);
					alca.setLatitudGPS(latitudGPS);
					alca.setLongitudGPS(longitudGPS);
					alca.setFecha(fecha);
					alca.setImei(imei);

					lista.add(alca);
				} while (c.moveToNext());
			}
			c.close();
			db.close();

		} catch (Exception e) {
			e.printStackTrace();
			if (c != null)
				c.close();
			if (db != null)
				db.close();
		}
		return lista;
	}
}
